# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/8/14 0014 9:30
@Author : 测试开发工程师
@File : 2.logstash - 数据采集与处理引擎.py
@Software: PyCharm
============================
"""

"""
logstash 数据处理流程
Data Source   ->    Logstash Pipeline    ->  Elasticsearch

pipeline 机制
source ->(file socket kafka redis es) ->  input  -> (数据源读取方式配置) -> filter -> (数据源解析处理) -> output -> (file socket kafka redis es) ->  store

logstash 安装
    docker 方式 ： 需要挂载本地数据路径与配置文件路径
            docker run -it --rm logstash:7.14.0 -e 'input{ stdin { }} output { stdount {}}'
    jar 包方式

logstash 的配置文件用法
    把 logstash.conf 配置文件放到 pipeline 目录中。注意数据路径要为 docker 内的路径
    把 logstash.yaml 挂载进去覆盖已有的默认域名，解决警告提示
    把数据目录挂载进去
    
    docker run -it --rm -v $PWD/config/logstash.yam:/user/share/logstash/config/logstash.yml -v $PWD/pipeline:/user/share/logstash.yml 
        -v /home/huangyansheng/www/:data/
    docker.elastic.co/logstash/logsstash:7.14.0
        --config.reload.automatic


input 常量配置
    stdin{}
    file {
        path -> "/data/*.csv"
    file {
        path -> "/data/*.json"
        codec: json
        }
    kfaka:
        topic_id -> "topic_name"
        zk_connect -> "${zookeeper的地址}：2181/kafka"
    }


filter 常见配置
    csv {
        columns -> ["log_time","real_ip],"stauts","http_user_agent"]
    json{
        source -> "message"
        }

      
output 常见配置
    elasticsearch{
        hosts -> ["x.x.x.x"]
        }
    stdout

配置文件语法
    字段引用：[][] "apache.%{[response][stauts]}"
    格式控制：%{}"/var/log/%{type}.%{+yyyy.MM.dd.HH}"
    逻辑控制：filter{if [action] == "login"{mutate { remove_field -> "secret"}}}
    字段修改： plugins 


场景 读取 json 数据
input {
    stdin{}
    }
filter{
    json {source -> "message"}
    }
output {
    stdout{}
    }

自动推送 csv 数据到 ES
input {
    file {
        path -> ["/data/*.csv"]
        }
    }
    filter {
    csv {
        columns -> ["a","b","c","d"]}
    }
    output {
        elasticsearch{
            hosts -> ["http://172.17.0.1:9200"]
        }
    }

"""
